--[[---------------------------------------------------------------------------- Хранилище текстовых интерпретаций рангов и функции для работы с ним. Чугай Александр ------------------------------------------------------------------------------]] -- ранги. формат: {novice={0,30}, experienced={30,60}, ...} local stalker_rank_intervals local monster_rank_intervals local stalker_max_rank_name local monster_max_rank_name local ranks_loaded = false -- парсит заданную строку рангов в заданную таблицу. -- возвращает название максимального ранга function parse_ranks( s, tbl ) s = "0," .. s .. ",10000" local t = parse_names( s ) local i = 2 while i < #t do tbl[t[i]] = { tonumber(t[i-1]), tonumber(t[i+1]) } i = i + 2 end return t[i-2] end -- вычитывает сталкерские и монстрячие ранги из game_relations.ltx function read_all_ranks() stalker_rank_intervals = {} monster_rank_intervals = {} stalker_max_rank_name = parse_ranks( ini_sys:r_string_ex( "game_relations", "rating" ), stalker_rank_intervals ) monster_max_rank_name = parse_ranks( ini_sys:r_string_ex( "game_relations", "monster_rating" ), monster_rank_intervals ) ranks_loaded = true -- print_table( stalker_rank_intervals ) end -- function get_rank_name( rank, tbl ) for name, interval in pairs( tbl ) do if rank >= interval[1] and rank < interval[2] then return name end end return nil end -- возвращает название ранга заданного game_object (персонажа) function get_obj_rank_name( obj ) if not ranks_loaded then read_all_ranks() end local obj_rank = obj.character_rank and obj:character_rank() or obj.rank and obj:rank() if not (obj_rank) then return "" end local cls = obj:clsid() if IsStalker(nil,cls) or IsTrader(nil,cls) then return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name else return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name end end function get_se_obj_rank_name( obj ) if not ranks_loaded then read_all_ranks() end local obj_rank = obj:rank() local cls = obj:clsid() if IsStalker(nil,cls) or IsTrader(nil,cls) then return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name else return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name end end -- возвращает табличку с интервалом рангов для заданного названия интервала function get_rank_interval( name ) if not ranks_loaded then read_all_ranks() end return stalker_rank_intervals[name] or monster_rank_intervals[name] end --discord function get_player_rank_name() local player_rank = get_obj_rank_name(db.actor) return player_rank end function get_player_reputation() return db.actor:character_reputation() end